/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia;
import javax.swing.JOptionPane;
import java.sql.ResultSet;

/**
 *
 * @author Fabio
 */
public class produtoDAO extends conexao{
    public produtoDAO() {
        super();
    }
    
    public void salvaProduto(BO.produtoBO p) throws Exception {
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "insert into produto values ("
                + "null,"
                + "'"+p.getNomeBO()+"',"
                + "'"+p.getCategoriaIdBO()+"',"
                + "'"+p.getCorBO()+"',"
                + "'"+p.getPesoBO()+"',"
                + "'"+p.getQuantidadeBO()+"',"
                + "'"+p.getQtdeMinBO()+"',"
                + "'"+p.getLarguraBO()+"',"
                + "'"+p.getAlturaBO()+"',"
                + "'"+p.getComprimentoBO()+"',"
                + "now(),"
                + "now())";
        this.executeSQL(sql);
        sql = "select id from produto where nome = '"+p.getNomeBO()+"'";
        this.sqlSelect(sql);
        rs = this.resultset;
        rs.first();
        sql = "insert into log values ("
                + "null,"
                + "'"+rs.getString("id")+"',"
                + "'Inserido o produto "+p.getNomeBO()+"',"
                + "now())";
        this.executeSQL(sql);
        JOptionPane.showMessageDialog(null, "Produto inserido. Código: "+rs.getString("id"));
        this.desconectar();
    }
    
    public void updateProduto(BO.produtoBO p) throws Exception {
        String sql;
        ResultSet rs = null;
        this.conecta();
        sql = "update produto set "
                + "nome = '"+p.getNomeBO()+"', "
                + "categoria = '"+p.getCategoriaIdBO()+"', "
                + "cor = '"+p.getCorBO()+"', "
                + "peso = '"+p.getPesoBO()+"', "
                + "quantidade = '"+p.getQuantidadeBO()+"', "
                + "qtdemin = '"+p.getQtdeMinBO()+"', "
                + "largura = '"+p.getLarguraBO()+"', "
                + "altura = '"+p.getAlturaBO()+"', "
                + "comprimento = '"+p.getComprimentoBO()+"', "
                + "dt_alteracao = now() "
                + "where id = '"+p.getIdBO()+"'";
        this.executeSQL(sql);
        sql = "select id from produto where id = '"+p.getIdBO()+"'";
        this.sqlSelect(sql);
        rs = this.resultset;
        rs.first();
        sql = "insert into log values ("
                + "null,"
                + "'"+p.getIdBO()+"',"
                + "'Alterado o produto "+p.getIdBO()+"',"
                + "now())";
        this.executeSQL(sql);
        JOptionPane.showMessageDialog(null, "Produto com código "+p.getIdBO()+" atualizado com sucesso!");
        this.desconectar();
    }

    public void excluirProduto(BO.produtoBO c) throws Exception {
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "Delete from produto where id = '"+c.getIdBO()+"'";
        this.executeSQL(sql);
        sql = "insert into log values ("
                + "null,"
                + "'"+c.getIdBO()+"',"
                + "'Excluido o produto "+c.getNomeBO()+"',"
                + "now())";
        this.executeSQL(sql);
        this.desconectar();
        JOptionPane.showMessageDialog(null, "Produto excluido com sucesso!");
    }   
    
    public void incluirCategoria(BO.produtoBO p) throws Exception {
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "insert into categoria (`nome`) values ('"+p.getCategoriaBO()+"')";
        this.executeSQL(sql);
        this.desconectar();
        JOptionPane.showMessageDialog(null, "Classificação de produto adicionada com sucesso!");
    }    
    
    public void buscarProdutoNome(BO.produtoBO p) throws Exception {
        int id, quantidade,i=0,j=0,index=0;
        String aux;
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "SELECT * FROM produto WHERE nome like '%"+p.getNomeBO()+"%'";
        this.sqlSelect(sql);
        rs = this.resultset;
        while (rs.next()) {
                aux=rs.getString("id");
                p.setMat(i, j, aux);
                id=Integer.parseInt(aux);
                p.setIdBO(id);
                p.setNomeBO(rs.getString("nome"));
                p.setMat(i, j+1, p.getNomeBO());
                p.setCategoriaBO(rs.getString("categoria"));
                p.setCorBO(rs.getString("cor"));
                p.setMat(i, j+2, p.getCorBO());
                p.setPesoBO(rs.getFloat("peso"));
                aux=rs.getString("quantidade");
                quantidade=Integer.parseInt(aux);
                p.setQuantidadeBO(quantidade);
                index++;
                i++; 
        }
        p.setTam(index);
        this.desconectar();
        if(rs != null) rs.close();
    }
    
    public void buscarProdutoCodigo(BO.produtoBO p) throws Exception {
        String sql;
        ResultSet rs = null;

        this.conecta();
        sql = "SELECT * FROM produto WHERE id = '"+p.getIdBO()+"'";
        this.sqlSelect(sql);
        rs = this.resultset;
        if (rs.next()) {
                p.setIdBO(rs.getInt("id"));
                p.setNomeBO(rs.getString("nome"));
                p.setCategoriaBO(rs.getString("categoria"));
                p.setCorBO(rs.getString("cor"));
                p.setPesoBO(rs.getFloat("peso"));
                p.setQuantidadeBO(rs.getInt("quantidade"));
                p.setQtdeMinBO(rs.getInt("qtdemin"));
                p.setAlturaBO(rs.getFloat("altura"));
                p.setComprimentoBO(rs.getFloat("comprimento"));
                p.setLarguraBO(rs.getFloat("largura"));
        }
        this.desconectar();
        if(rs != null) rs.close();
    }
    
    public void buscarProdutoCategoria(BO.produtoBO p) throws Exception {
        int id, quantidade, index=0, i=0, j=0;
        String aux;
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "SELECT * FROM produto WHERE categoria = '"+p.getCategoriaBO()+"'";
        this.sqlSelect(sql);
        rs = this.resultset;
        while (rs.next()) {
                aux=rs.getString("id");
                p.setMat(i, j, aux);
                id=Integer.parseInt(aux);
                p.setIdBO(id);
                p.setNomeBO(rs.getString("nome"));
                p.setMat(i, j+1, p.getNomeBO());
                p.setCategoriaBO(rs.getString("categoria"));
                p.setCorBO(rs.getString("cor"));
                p.setMat(i, j+2, p.getCorBO());
                p.setPesoBO(rs.getFloat("peso"));
                aux=rs.getString("quantidade");
                quantidade=Integer.parseInt(aux);
                p.setQuantidadeBO(quantidade);
                index++;
                i++;           
        }
        p.setTam(index);
        this.desconectar();
        if(rs != null) rs.close();
    }
    
    public void buscarLogProd(BO.produtoBO p) throws Exception {
        int i=0,j=0,index=0;
        String sql;
        ResultSet rs = null;

        this.conecta();
        sql = "SELECT * FROM log WHERE id_produto = '"+p.getIdBO()+"'";
        this.sqlSelect(sql);
        rs = this.resultset;
        while (rs.next()) {
            p.setMat(i, j, rs.getString("id_produto"));
            p.setMat(i, j+1, rs.getString("descricao"));
            p.setMat(i, j+2, rs.getString("dt_modificacao"));
            i++;
            index++;
        }
        p.setTam(index);
        this.desconectar();
        if(rs != null) rs.close();
    }
    
    public void buscarLogData(BO.produtoBO p) throws Exception {
        int i=0,j=0,index=0;
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "select * from log WHERE DATE_FORMAT(dt_modificacao, '%d/%m/%Y') = '"+p.getDataBO()+"'";
        this.sqlSelect(sql);
        rs = this.resultset;
        while (rs.next()) {
            p.setMat(i, j, rs.getString("id_produto"));
            p.setMat(i, j+1, rs.getString("descricao"));
            p.setMat(i, j+2, rs.getString("dt_modificacao"));
            i++;
            index++;
        }
        p.setTam(index);
        this.desconectar();
        if(rs != null) rs.close();
    }
    
    public void preencherComboBox(BO.produtoBO p) throws Exception
    {
        int i=0,index=0;
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "select * from categoria order by nome";
        this.sqlSelect(sql);
        rs = this.resultset;
        while(rs.next())
        {
            p.setVet(i, rs.getString("nome"));
            i++;
            index++;
        }
        p.setTamVet(index);
    }
    
    public void preencherMinimo(BO.produtoBO p) throws Exception
    {
        int i=0, j=0, index=0;
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "select * from produto where quantidade < qtdemin";
        this.sqlSelect(sql);
        rs = this.resultset;
        while(rs.next())
        {
            p.setMat2(i, j, rs.getString("id"));
            p.setMat2(i, j+1, rs.getString("nome"));
            p.setMat2(i, j+2, rs.getString("quantidade"));
            p.setMat2(i, j+3, rs.getString("qtdemin"));
            i++;
            index++;
        }
        p.setTam(index);
    }

    public void preencherLista(BO.produtoBO p) throws Exception
    {
        int i=0, j=0, index=0;
        String sql;
        ResultSet rs = null;
        
        this.conecta();
        sql = "select * from produto";
        this.sqlSelect(sql);
        rs = this.resultset;
        while(rs.next())
        {
            p.setMat3(i, j, rs.getString("id"));
            p.setMat3(i, j+1, rs.getString("nome"));
            p.setMat3(i, j+2, rs.getString("categoria"));
            p.setMat3(i, j+3, rs.getString("cor"));
            p.setMat3(i, j+4, rs.getString("quantidade"));
            p.setMat3(i, j+5, rs.getString("qtdemin"));
            i++;
            index++;
        }
        p.setTam(index);
    }    
    
}
